package com.ruoyi.system.service;

import java.util.List;
import java.util.Map;

import com.ruoyi.system.domain.PublicOpinionTopic;
import com.ruoyi.system.domain.vo.*;

/**
 * 舆情主题Service接口
 * 
 * @author ruoyi
 * @date 2021-07-14
 */
public interface IPublicOpinionTopicService 
{
    /**
     * 查询舆情主题
     * 
     * @param id 舆情主题ID
     * @return 舆情主题
     */
    public PublicOpinionTopic selectPublicOpinionTopicById(Long id);

    /**
     * 查询舆情主题列表
     * 
     * @param publicOpinionTopic 舆情主题
     * @return 舆情主题集合
     */
    public List<PublicOpinionTopic> selectPublicOpinionTopicList(PublicOpinionTopic publicOpinionTopic);

    /**
     * 新增舆情主题
     * 
     * @param publicOpinionTopic 舆情主题
     * @return 结果
     */
    public int insertPublicOpinionTopic(PublicOpinionTopic publicOpinionTopic);

    /**
     * 修改舆情主题
     * 
     * @param publicOpinionTopic 舆情主题
     * @return 结果
     */
    public int updatePublicOpinionTopic(PublicOpinionTopic publicOpinionTopic);

    /**
     * 批量删除舆情主题
     * 
     * @param ids 需要删除的舆情主题ID
     * @return 结果
     */
    public int deletePublicOpinionTopicByIds(Long[] ids);


    /**
     * 获取正负面信息趋势图
     * @param topicId
     * @return
     */
    List<NameListValue> getSentimentByPublishTimeByTopicId(Long topicId);

    /**
     * 获取主题热词
     * @param topicId
     * @param i
     * @return
     */
    List<NameValue> getKeywordsByTopicId(Long topicId, int i);

    /**
     * 信息载体趋势图
     * @param topicId
     * @return
     */
    List<NameListValue> getMediaTypeByPublishTimeByTopicId(Long topicId);

    /**
     * 媒体活跃排行榜（情感）
     * @param topicId
     * @return
     */
    List<OpMediaNameSensitiveDayNumVM> countSensitiveOpinionByMediaName(Long topicId);

    /**
     * 意见领袖排行（情感）
     * @param topicId
     * @return
     */
    List<OpAuthorSensitiveDayNumVM> countSensitiveAuthorOpinion(Long topicId);

    /**
     * 信息总览
     * @param topicId
     * @return
     */
    OpTypeNumVM getAllInformation(Long topicId);

    /**
     * 舆情数量按省分组
     * @param topicId
     * @return
     */
    List<NameValue> getPublicOpinionCountGroupByProvinceOfTopicId(Long topicId);

    /**
     * 互动声量
     * @param topicId
     * @return
     */
    Map<String,Long> getInteractiveInformation(Long topicId);

    /**
     * 影响力
     * @param topicId
     * @return
     */
    Map<String,Long> getInfluenceValue(Long topicId);
}
